package grpc

import (
	"fmt"
	"go.uber.org/zap"
	"google.golang.org/grpc"
	"google.golang.org/grpc/keepalive"
	"net"
	"time"
	"zhejianglab/gin-apiserver/pkg/logger"
	"zhejianglab/gin-apiserver/pkg/setting"
	pb "zhejianglab/gin-apiserver/proto"
)

const (
	// Network 网络通信协议
	Network string = "tcp"
)

func StartReIDGrpc() {
	// 监听本地端口
	listener, err := net.Listen(Network, fmt.Sprint(":", setting.RPCPort))
	if err != nil {
		logger.Log.Fatal("gRPC net.Listen err ", zap.String("reason", err.Error()))
	}
	logger.Log.Info(fmt.Sprintf("gRPC net.Listing...%d", setting.RPCPort))
	option := grpc.KeepaliveParams(keepalive.ServerParameters{
		MaxConnectionIdle: 5 * time.Minute,
		//这个连接最大的空闲时间，超过就释放，解决proxy等到网络问题（不通知grpc的client和server）
	})
	// 新建gRPC服务器实例
	GrpcServer := grpc.NewServer(option)
	// 在gRPC服务器注册我们的服务
	pb.RegisterServiceTaskServer(GrpcServer, &RpcService{})
	//用服务器 Serve() 方法以及我们的端口信息区实现阻塞等待，直到进程被杀死或者 Stop() 被调用
	err = GrpcServer.Serve(listener)
	if err != nil {
		logger.Log.Fatal("ReIDGrpcServer.Serve err", zap.String("reason", err.Error()))
	}
}
